package cn.com.huzo.repository.tech;

import cn.com.huzo.model.entities.tech.CostForecastLinesEntity;
import huzofw.repository.GenericRepository;
import java.util.List;

/**
 * 成本预测明细数据访问对象接口。
 *
 * @author 范学春
 */
public interface CostForecastLinesRepository extends GenericRepository<CostForecastLinesEntity, String> {

    /**
     * 根据成本预测标识取得成本预测明细。
     *
     * @param headerKey 成本预测标识
     * @return 成本预测计划明细
     */
    List<CostForecastLinesEntity> fetchByHeaderKey(Long headerKey);

    /**
     * 根据选择的款号（从单耗选取），生成产品成本预测明细表信息。
     *
     * @param headerId 成本预测ID
     * @param bomHeaderId 要引入的单耗表ID
     * @param perColourQuantity 每色数量
     * @return 影响的行数
     */
    Integer insertLinesByBom(Long headerId, Long bomHeaderId, Integer perColourQuantity);

    /**
     * 根据选择的材料加入预测明细
     *
     * @param itemList 要插入的材料
     * @return 影响的行数
     */
    Integer insertLinesByNewMaterial(List<CostForecastLinesEntity> itemList);

    /**
     * 通过料号更改当前成本预测明细的材料。
     *
     * @param linesId 成本预测表明细标识
     * @param materialId 要更改的料ID
     * @return 影响行数
     */
    Integer updateLinesByMaterialId(String linesId, Long materialId);

    /**
     * 根据所选款号，引入成本预测明细。
     *
     * @param headerId 当前成本预测ID
     * @param importedHeaderId 要引入的成本预测ID
     * @param createdBy 作成者
     * @param updatedBy 更新者
     * @return 影响行数
     */
    Integer importLinesFromOtherCostForecast(Long headerId, Long importedHeaderId, Long createdBy, Long updatedBy);

    /**
     * 从剪切板粘贴数据
     *
     * @param headerId 当前成本预测ID
     * @param copiedLinesId 要粘贴的成本预测明细ID
     * @param materialId 材料ID
     * @param uomId 单位ID
     * @param specification 规格
     * @param orderNo 要粘贴的成本预测明细行号
     * @param createdBy 作成者
     * @param updatedBy 更新者
     * @return 影响行数
     */
    Integer insertFromClipboard(Long headerId, String copiedLinesId, Long materialId,
            Long uomId, String specification, Integer orderNo, Long createdBy, Long updatedBy);

    /**
     * 重新设置成本预测表标识明细的顺序号
     *
     * @param headerId 成本预测表标识
     * @return
     */
    Integer resetLinesOrder(Long headerId);

    /**
     * 更新成本预测明细排列顺序。
     *
     * @param itemsList 所选成本预测表明细
     * @return 影响行数
     */
    Integer updateLinesOrder(List<CostForecastLinesEntity> itemsList);

    /**
     * 重新给数值等于零的成本3（数量，金额）赋值（默认=成本2）。
     *
     * @param itemList 要更新的分配明细数据列表
     * @return 影响的行数
     */
    Integer setDefaultUnitCost3(List<CostForecastLinesEntity> itemList);
}
